package vue;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import controleur.EnregistrerLivraison;

import modele.CarnetDeCommandes;
import modele.Commande;

import java.util.Vector;

public class Panneau_Livreur extends JPanel {
	
	private JPanel sectionEmplacement;
	private JTextField textFieldEmplacement;
	private JPanel sectionCarteGoogle;
	private JLabel carteGoogle;
	private JPanel sectionCommandes;
	private JComboBox listeCommandes;
	private JButton boutonAccepterLivraison;
	
	/**
	 * Constructeur
	 * @param dimension - Dimension
	 */
	public Panneau_Livreur(Dimension dimension) {
		this.setSize(dimension);
		this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
		
		// Ajout de la section de l'emplacement du livreur
		sectionEmplacement = new JPanel();
		sectionEmplacement.setLayout(new BoxLayout(sectionEmplacement, BoxLayout.LINE_AXIS));
		textFieldEmplacement = new JTextField("Entrez votre adresse ici");
		sectionEmplacement.add(textFieldEmplacement);
		// Fin de l'ajout de la section de l'emplacement du livreur
		
		// Ajout de la carte google
		sectionCarteGoogle = new JPanel();
		sectionCarteGoogle.setLayout(new BoxLayout(sectionCarteGoogle, BoxLayout.LINE_AXIS));
		carteGoogle = new JLabel("");
		try {
			sectionCarteGoogle.add(new JLabel(new ImageIcon(ImageIO.read(new File("src/images/legende.png")))));
		} catch (IOException e1) {
			System.out.println(e1.getLocalizedMessage());
		}
		sectionCarteGoogle.add(carteGoogle);
		// Fin de l'ajout de la carte google
		
		// Ajout de la section des commandes
		sectionCommandes = new JPanel();
		sectionCommandes.setLayout(new BoxLayout(sectionCommandes, BoxLayout.LINE_AXIS));
		Vector<String> listeDesCommandes = new Vector<String>();
		for (Commande commande : CarnetDeCommandes.getInstance()) {
			if (commande.estPrisEnCharge()) {
				listeDesCommandes.add("Commande acceptée - "+commande.toString());
			} else {
				listeDesCommandes.add(commande.toString());
			}
		}
		listeCommandes = new JComboBox(listeDesCommandes);
		
		listeCommandes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				sectionCarteGoogle.remove(carteGoogle);
				carteGoogle = EnregistrerLivraison.genererTrajet(listeCommandes.getSelectedIndex(), textFieldEmplacement.getText());
				sectionCarteGoogle.add(carteGoogle);
				if (EnregistrerLivraison.verifierPossibiliteAccepter()) {
					ajouterBoutonAccepter();
				} else {
					retirerBoutonAccepter();
				}
				update();
			}
		});
		sectionCommandes.add(listeCommandes);
		boutonAccepterLivraison = new JButton("Accepter la livraison");
		boutonAccepterLivraison.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				EnregistrerLivraison.accepterLivraison(listeCommandes.getSelectedIndex());
				JOptionPane.showMessageDialog(sectionCommandes, "Livraison acceptée (1+1=10)");
				fermerPanneau();
			}
		});
		boutonAccepterLivraison.setEnabled(false);
		sectionCommandes.add(boutonAccepterLivraison);
		// Fin de l'ajout de la section des commandes
		
		this.add(sectionEmplacement);
		this.add(sectionCarteGoogle);
		this.add(sectionCommandes);
	}
	
	public void ajouterBoutonAccepter() {
		boutonAccepterLivraison.setEnabled(true);
	}
	
	public void retirerBoutonAccepter() {
		boutonAccepterLivraison.setEnabled(false);
	}
	
	/**
	 * Réinitialise le panneau du livreur
	 */
	private void update() {
		this.revalidate();
	}
	
	private void fermerPanneau() {
		this.removeAll();
		update();
	}
}
